home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-17 / dosdev.zip / TXSTK2.C < prev   
Text File  |  1993-01-04  |  2KB  |  88 lines

  1. /* Listing 5 - Test STKDEV2 using IOCTL for record transfer */
  2.  
  3. #include "stdio.h"
  4.  
  5. main()    /* txstk.c - test XSTK device */
  6. {struct {int scs,sss,sds,ses; } sregs;
  7.  struct {int ax,bx,cx,dx,si,di,ds,es; } callregs, retregs;
  8.  int n, handle, flags;
  9.  char setrecsize, chkrecsize;
  10.  char *dev = "XSTK";
  11.  char *outstr = "Hello";
  12.  char *instr;
  13.  
  14.  segread(&sregs);   /* sregs.sds = current ds */
  15.  callregs.ds = sregs.sds;
  16.  
  17.  /* open XSTK in rw mode */
  18.  callregs.ax = 0x3D02;
  19.  callregs.dx = dev;
  20.  flags = sysint21(&callregs,&retregs);
  21.  if(flags & 1) printf("Open error %d\n",retregs.ax);
  22.    else  handle = retregs.ax;
  23.  
  24.  /* write outstr to XSTK one byte at a time using ioctl_out */
  25.  callregs.ax = 0x4403;
  26.  callregs.cx = 1;
  27.  callregs.bx = handle;
  28.  for(n=0;n<=4;n++)
  29.     {callregs.dx = &outstr[n];
  30.      flags = sysint21(&callregs,&retregs);
  31.      if(flags & 1)  printf("Write error %d on char %d\n",retregs.ax,n);
  32.     }
  33.  
  34.  
  35.  /* read outstr from XSTK one byte at a time - ioctl_in */
  36.  callregs.ax = 0x4402;
  37.  callregs.cx = 1;
  38.  callregs.bx = handle;
  39.  for(n=0;n<=4;n++)
  40.     {callregs.dx = &instr[0];
  41.      flags = sysint21(&callregs,&retregs);
  42.      if(flags & 1)  printf("Read error %d on char %d\n",retregs.ax,n);
  43.        else putchar(instr[0]);
  44.     }
  45.  putchar('\n');
  46.  
  47.  /* change XSTK record size to 5 bytes with IN - OUT calls */
  48.  
  49.  setrecsize = 5;
  50.  callregs.ax = 0x4000;      /* set rec size */
  51.  callregs.cx = 1;
  52.  callregs.bx = handle;
  53.  callregs.dx = &setrecsize;
  54.  flags = sysint21(&callregs,&retregs);
  55.  
  56.  
  57.  callregs.ax = 0x3F00;      /* read rec size from XSTK */
  58.  callregs.cx = 1;
  59.  callregs.bx = handle;
  60.  callregs.dx = &chkrecsize;
  61.  flags = sysint21(&callregs,&retregs);
  62.  printf("XSTK record size reset to %d bytes\n",chkrecsize);
  63.  
  64.  
  65.  /* write outstr to XSTK as a 5-byte record */
  66.  callregs.ax = 0x4403;
  67.  callregs.cx = 5;
  68.  callregs.bx = handle;
  69.  callregs.dx = &outstr[0];
  70.  flags = sysint21(&callregs,&retregs);
  71.  if(flags & 1)  printf("Write error %d on char %d\n",retregs.ax,n);
  72.  
  73.  
  74.  
  75.  /* read outstr from XSTK as a record */
  76.  callregs.ax = 0x4402;
  77.  callregs.cx = 5;
  78.  callregs.bx = handle;
  79.  callregs.dx = &instr[0];
  80.  flags = sysint21(&callregs,&retregs);
  81.  if(flags & 1)  printf("Read error %d on char %d\n",retregs.ax,n);
  82.     else puts(instr);
  83.  
  84.  
  85.  
  86.  
  87. } /* end txstk */
  88.